package com.android.formula.database;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.android.formula.utils.LogUtils;

public class DatabaseHelper extends SQLiteOpenHelper {
	private static String TAG = "DataBaseHelper"; // Tag just for the LogCat
													// window
	// destination path (location) of our database on device

	public static String DB_PATH = "";

	private String DB_NAME;// Database name

	private SQLiteDatabase mDataBase;

	private final Context mContext;

	public DatabaseHelper(Context context, String dbName) {
		super(context, dbName, null, 1);// 1? its Database Version
		if (android.os.Build.VERSION.SDK_INT >= 17) {
			DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
		} else {
			DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
		}
		this.mContext = context;
		this.DB_NAME = dbName;
	}

	public void createDataBase() throws IOException {
		// If database not exists copy it from the assets

		this.getReadableDatabase();
		this.close();
		try {
			// Copy the database from assests
			copyDataBase();
			LogUtils.e(TAG, "createDatabase database created");
		} catch (IOException mIOException) {
			throw new Error("ErrorCopyingDataBase");
		}

	}

	// Check that the database exists here: /data/data/your package/databases/Da
	// Name
	// private boolean checkDataBase() {
	// File dbFile = new File(DB_PATH + DB_NAME);
	// // Log.v("dbFile", dbFile + "   "+ dbFile.exists());
	// return dbFile.exists();
	// }

	// Copy the database from assets
	private void copyDataBase() throws IOException {
		InputStream mInput = mContext.getAssets().open(DB_NAME);
		String outFileName = DB_PATH + DB_NAME;
		OutputStream mOutput = new FileOutputStream(outFileName);
		byte[] mBuffer = new byte[1024];
		int mLength;
		while ((mLength = mInput.read(mBuffer)) > 0) {
			mOutput.write(mBuffer, 0, mLength);
		}
		mOutput.flush();
		mOutput.close();
		mInput.close();
	}

	// Open the database, so we can query it
	public boolean openDataBase() throws SQLException {
		String mPath = DB_PATH + DB_NAME;
		// Log.v("mPath", mPath);
		mDataBase = SQLiteDatabase.openDatabase(mPath, null,
				SQLiteDatabase.CREATE_IF_NECESSARY);
		// mDataBase = SQLiteDatabase.openDatabase(mPath, null,
		// SQLiteDatabase.NO_LOCALIZED_COLLATORS);
		return mDataBase != null;
	}

	@Override
	public synchronized void close() {
		if (mDataBase != null)
			mDataBase.close();
		super.close();
	}

	@Override
	public void onCreate(SQLiteDatabase arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}
